 |
Technote 1108
Unknown Sound Features
ÇŸÇΔÇÒÇ«ímÇÁÇÍǃǢǻǩǡÇΩ Sound Manager ÇÃã@î\
DZÇà TECHNOTE Ç≈ÇÕÅAéüÇà Sound Manager ÇÃã@î\DžǬǢǃê‡ñæÇµÇ‹Ç∑ÅB
É}ÉãÉ`ÉTÉEÉìÉhèoóÕÉ`ÉÉÉlÉã
ÉXÉeÉåÉIÉTÉEÉìÉhÇ 1 Ç¬ÇæÇØÇ≈Ç»Ç≠ï°êîèoóÕÇ∑ÇÈï˚ñ@ÅBDZDZÇ≈ê‡ñæÇ∑ÇÈÉeÉNÉjÉbÉNÇégǶnjÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕ Macintosh Ç™éùǡǃǢÇÈÉ`ÉÉÉlÉãÇΔìØêîÇÃÉ`ÉÉÉlÉãÇ≈ìØéûÇ…ÉTÉEÉìÉhÇèoóÕÇ≈Ç´ÇÈÇÊǧDžǻÇËÇ‹Ç∑ÅB
É}ÉãÉ`ÉTÉEÉìÉhì¸óÕÉ`ÉÉÉlÉã
ÉXÉeÉåÉIÉTÉEÉìÉhÇ 1 Ç¬ÇæÇØÇ≈Ç»Ç≠ï°êîò^âπÇ∑ÇÈï˚ñ@ÅBDZDZÇ≈ê‡ñæÇ∑ÇÈÉeÉNÉjÉbÉNÇégǶnjÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇÕ Macintosh Ç™éùǡǃǢÇÈì¸óÕÉ\Å[ÉXÇΔìØêîÇÃì¸óÕÉ\Å[ÉXåoóRÇ≈ìØéûÇ…ÉTÉEÉìÉhÇò^âπÇ≈Ç´ÇÈÇÊǧDžǻÇËÇ‹Ç∑ÅB
É{ÉäÉÖÅ[ÉÄÇΔÉpÉjÉìÉO
å¯â ìIÇ»ÉIÅ[ÉfÉBÉIÉGÉtÉFÉNÉgÇê∂Ç›èoÇ∑ï˚ñ@ÅB
ÉTÉEÉìÉhÉ`ÉÉÉlÉãÇÃÉÇÉjÉ^
ÉTÉEÉìÉhÉRÉìÉ|Å[ÉlÉìÉgÇégǡǃÅAì¡íËÇÃÉTÉEÉìÉhÉ`ÉÉÉlÉãÇÃÉTÉEÉìÉhèoóÕÉåÉxÉãÇÉÇÉjÉ^Ç∑ÇÈï˚ñ@ÅB
É}ÉãÉ`ÉTÉEÉìÉhèoóÕÉ`ÉÉÉlÉã
DZÇÃã@î\ÇÕÅASystem 7.0 ÇΔÇΔLJDžèoâ◊Ç≥ÇÍÇΩ Sound Manager 3.0 Ç©ÇÁÉTÉ|Å[ÉgÇ≥ÇÍǃǢNjǵÇΩÅBé¿ç€ÅAÅwInside Macintosh: SoundÅxÇà 2-128 ÉyÅ[ÉWÇ…ÇÕDZÇÃã@î\ÇÃê‡ñæÇ™Ç†ÇËÇ‹Ç∑ÅBǵǩǵÅADZÇÃã@î\ÇÃégÇ¢ï˚DžǬǢǃÇÕê‡ñæÇ≥ÇÍǃǢNjÇπÇÒÅB
SndNewChannel ÇåƒÇ—èoÇ∑ÇΔÇ´ÅAìnÇ≥ÇÍÇÈÉpÉâÉÅÅ[É^Çà 1 ǬÇÕ long
Ç≈džÇËÅADZÇÍÇ™É`ÉÉÉlÉãÇÃèâä˙âªÉpÉâÉÅÅ[É^ÇéwíËǵNjÇ∑ÅBí èÌÅAÉfÉxÉçÉbÉpÇÕDZÇÃÉpÉâÉÅÅ[É^Ç…
nil ÅAinitMono ÅAÇ‹ÇΩÇÕ initStereo ÇìnÇ∑ÇæÇØÇ≈Ç∑Ç™ÅAé¿ÇÕ kUseOptionalOutputDevice (DZÇÍÇÕ -1 ÇΔíËã`Ç≥ÇÍǃǢNjÇ∑) ÇìnÇ∑DZÇΔLJÇ≈Ç´Ç‹Ç∑ÅB
kUseOptionalOutputDevice ÇégópÇ∑ÇÈÇΔÅAÉTÉEÉìÉhÇçƒê∂Ç∑ÇÈÇΩÇflÇÃàŸÇ»ÇÈèoóÕÉRÉìÉ|Å[ÉlÉìÉgÇéwíËÇ≈Ç´ÇÈÇÊǧDžǻÇËÇ‹Ç∑ÅBǬNjÇËÅAkUseOptionalOutputDevice
Ç…ÇÊÇËÅAÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢÇÈèoóÕÉfÉoÉCÉXÇΔìØêîÇÃèoóÕÉfÉoÉCÉXÇ≈ìØéûÇ…ÉTÉEÉìÉhÇçƒê∂Ç≈Ç´ÇÈÇÊǧDžǻÇÈÇΔǢǧDZÇΔÇ≈Ç∑ÅBÇΩÇΔǶnjÅA6 É`ÉÉÉlÉãÉJÅ[ÉhÇéùǡǃǢÇÈÉnÅ[ÉhÉEÉFÉAÉfÉxÉçÉbÉpÇ≈džÇÍÇŒÅA3 ǬÇÃÉXÉeÉåÉIèoóÕÉRÉìÉ|Å[ÉlÉìÉgÇçÏê¨Ç≈Ç´ÇÈDZÇΔÇ…Ç»ÇË (6 ǬÇÃèoóÕÉ`ÉÉÉlÉãÇ 2 Ǭ 1 ëgDžǵǃ)ÅAkUseOptionalOutputDevice ÉZÉåÉNÉ^ÇégǡǃDZÇÃÉJÅ[ÉhÇ…ëŒâûǵÇΩÉ\ÉtÉgÉEÉFÉAÇèëÇ´ÅA3 ǬÇÃÉXÉeÉåÉIÉTÉEÉìÉhÇìØéûÇ…çƒê∂Ç≈Ç´ÇÈÇÊǧDžǻÇÈÇÕÇ∏Ç≈Ç∑ÅB
kUseOptionalOutputDevice ÉZÉåÉNÉ^ÇÕéüÇÃÇÊǧDžìÆçÏǵNjÇ∑ÅBÇ‹Ç∏ÅAégópǵÇΩÇ¢èoóÕÉRÉìÉ|Å[ÉlÉìÉgÇÃÉRÉìÉ|Å[ÉlÉìÉgÉCÉìÉXÉ^ÉìÉXÇåüèoÇ∑ÇÈïKóvǙdžÇËÇ‹Ç∑ (éüÇÃó·Ç≈ÇÕÅAAIFF Writer ÉTÉìÉvÉãèoóÕÉRÉìÉ|Å[ÉlÉìÉgÇåüèoǵNjÇ∑)ÅB
// èoóÕÉRÉìÉ|Å[ÉlÉìÉgÇÃÉCÉìÉXÉ^ÉìÉXÇåüèoÇ∑ÇÈ
outputDev.componentType = 'sdev';
outputDev.componentSubType = 'AIFW';
outputDev.componentManufacturer = 'appl';
outputDev.componentFlags = 0;
outputDev.componentFlagsMask = 0;
theAIFWComponent = FindNextComponent (0, &outputDev);
|
Ç∑Ç◊ǃÇÃÉTÉEÉìÉhèoóÕÉRÉìÉ|Å[ÉlÉìÉgÇåüèoÇ∑ÇÈÉWÉFÉlÉäÉbÉNÇ»ÉãÅ[É`ÉìÇÕéüÇÃÇÊǧDžǻÇËÇ‹Ç∑ÅB
long FindAllsdevs (Component ** componentsArray) {
Component foundComponent,
aComponent;
ComponentDescription looking;
long numComponents,
i;
aComponent = 0;
looking.componentType = kSoundOutputDeviceType; // 'sdev'
looking.componentSubType = 0;
looking.componentManufacturer = 0;
looking.componentFlags = 0;
looking.componentFlagsMask = 0;
numComponents = CountComponents (&looking);
*componentsArray = (Component*)NewPtr (sizeof (Component) * numComponents);
if (componentsArray == nil) {
numComponents = 0; // ÉTÉEÉìÉhèoóÕÉ`ÉÉÉlÉãÇÃÉäÉXÉgÇçÏê¨Ç≈Ç´Ç»Ç≠Ç»ÇÈ
}
for (i = 0; i < numComponents; i++) {
foundComponent = FindNextComponent (aComponent, &looking);
(*componentsArray)[i] = foundComponent;
aComponent = foundComponent; // åüèoÇåpë±Ç∑ÇÈ
}
return numComponents;
}
|
DZÇÃÉãÅ[É`ÉìÇégópÇ∑ÇÈÇΔÅAÉTÉEÉìÉhèoóÕÉ`ÉÉÉlÉãÇÃÉäÉXÉgÇÉÜÅ[ÉUÇ…íÒé¶Ç≈Ç´ÅAÉTÉEÉìÉhÇÃÉ`ÉÉÉlÉãêîÇÉ~ÉLÉVÉìÉOÇ…ÇÊǡǃ 2 É`ÉÉÉlÉãÇ…å∏ÇÁÇ∑DZÇΔÇ»Ç≠ÅAÉÜÅ[ÉUÇÕÉ}ÉãÉ`É`ÉÉÉlÉã (2 É`ÉÉÉlÉãÇí¥Ç¶ÇÈ) ÉTÉEÉìÉhÇèoóÕÇ≈Ç´ÇÈÇÊǧDžǻÇËÇ‹Ç∑ÅB
DZDZÇ≈écÇ≥ÇÍǃǢÇÈèàóùÇΔǢǶnjÅAëIëÇ≥ÇÍÇΩèoóÕÉfÉoÉCÉXÇégópÇ∑ÇÈêVǵǢÉTÉEÉìÉhÉ`ÉÉÉlÉãÇçÏê¨Ç∑ÇÈDZÇΔÇæÇØÇ≈Ç∑ÅB
err = SndNewChannel (&theOptionalOutputChan, kUseOptionalOutputDevice,
(long)theAIFWComponent, nil);
|
DZÇÍÇÕNjǡÇΩÇ≠ä»íPÇ»òbÇ≈Ç∑ÅBtheOptionalOutputChan åoóRÇ≈ÉTÉEÉìÉhÇçƒê∂Ç∑ÇÈÇΩÇ—Ç…ÅAǪÇÃÉTÉEÉìÉhÇÕëgÇ›çûÇ›ÉnÅ[ÉhÉEÉFÉAÇ÷ÇÕëóÇÁÇÍÇ∏ÅAAIFF Writer èoóÕÉfÉoÉCÉX (DZÇÍÇ™É}ÉãÉ`É`ÉÉÉlÉãèoóÕÉJÅ[ÉhÇÃëÊ 3 Ç®ÇÊÇ—ëÊ 4 ÇÃÉ`ÉÉÉlÉãÇ≈džÇÈDZÇΔÇÕóeà’Ç…ÇÌÇ©ÇÈÇÕÇ∏Ç≈Ç∑) Ç…ëóÇÁÇÍÇ‹Ç∑ÅB
ǪÇÍÇ≈ÇÕÅAtheOptionalOutputChan ÉZÉåÉNÉ^ÇÃégópÇâ¬î\Ç…Ç∑ÇÈÇΩÇflÇ…ÅAÉ}ÉãÉ`É`ÉÉÉlÉãÉnÅ[ÉhÉEÉFÉAÇÃÉfÉxÉçÉbÉpÇ™çsǧÇ◊ǴDZÇΔÇΔÇÕǢǡÇΩÇ¢âΩÇ≈ǵÇÂǧÅB
ǪÇÍÇŸÇ«ëΩÇ≠ÇÃDZÇΔÇçsǧïKóvÇÕdžÇËÇ‹ÇπÇÒÅBÉfÉxÉçÉbÉpÇ™Ç∑Ç◊ǴDZÇΔÇÕÅAÉnÅ[ÉhÉEÉFÉAÇ™ÉTÉ|Å[ÉgÇ∑ÇÈèoóÕÉ`ÉÉÉlÉãÇÃäeÉyÉAÇ…ëŒÇµÇƒèoóÕÉRÉìÉ|Å[ÉlÉìÉgÇçÏê¨Ç∑ÇÈDZÇΔÇæÇØÇ≈Ç∑ÅBÉnÅ[ÉhÉEÉFÉAÇ…
2 ǬÇÃÉ`ÉÉÉlÉãǵǩǻǢèÍçáÅAïKóvÇΔÇ»ÇÈÇÃÇÕ 1 ǬÇÃèoóÕÉRÉìÉ|Å[ÉlÉìÉgÇæÇØÇ≈Ç∑ÅBÇ‹ÇΩÅAÉnÅ[ÉhÉEÉFÉAÇ… 20 å¬ÇÃèoóÕÉ`ÉÉÉlÉãǙdžÇÈèÍçáÇÕÅA10 å¬ÇÃèoóÕÉRÉìÉ|Å[ÉlÉìÉgÇ™ïKóvÇ…Ç»ÇËÇ‹Ç∑ÅB
DZDZÇ≈ÅAÅuǶǡÅA10 å¬ÇÃèoóÕÉRÉìÉ|Å[ÉlÉìÉgÅBÇøÇÂÇ¡ÇΔǮǩǵǢÇÃÇ≈ÇÕÅBÅvÇΔǢǧÉfÉxÉçÉbÉpÇÃåæótÇ™ï∑DZǶǃÇ≠ÇÈÇÊǧÇ≈Ç∑ÅB
Ç≈LJâΩLJǮǩǵǻÇΔDZÇÎÇÕdžÇËÇ‹ÇπÇÒÅBÉRÉìÉ|Å[ÉlÉìÉgÇÕLJÇΔLJÇΔçƒóòópâ¬î\Ç≈džÇÈÇΩÇflÅAé¿ç€Ç…ïKóvÇ»ÇÃÇÕÅAdžÇΩǩLJ 10 å¬ÇÃàŸÇ»ÇÈèoóÕÉRÉìÉ|Å[ÉlÉìÉgÇ™ë∂ç›Ç∑ÇÈÇ©ÇÃÇÊǧDžÅAìØÇ∂èoóÕÉRÉìÉ|Å[ÉlÉìÉgÇ 10 âÒìoò^Ç∑ÇÈ 10 å¬Çà 'thng' ÉäÉ\Å[ÉXÇ»ÇÃÇ≈Ç∑ÅB
èoóÕÉRÉìÉ|Å[ÉlÉìÉgÇÕÅAèoóÕêÊÇΔÇ»ÇÈåªé¿ÇÃÉnÅ[ÉhÉEÉFÉAÉ`ÉÉÉlÉãÇ™íäè€âªÇ≥ÇÍÇÈÇÊǧDžèëǢǃÇ≠ÇæÇ≥Ç¢ÅBǬNjÇËÅA1 ǬÇÃÉRÅ[ÉhÉxÅ[ÉXÇ≈égópâ¬î\Ç»Ç∑Ç◊ǃÇÃÉ`ÉÉÉlÉãÇ…ëŒâûÇ∑ÇÈÇÊǧǻï˚ñ@Ç≈Ç∑ÅBǪǧÇ∑ÇÍÇŒÅAèoóÕÉRÉìÉ|Å[ÉlÉìÉgÇ™ìoò^ÇçsǧÇΔÇ´Ç…ÅAêßå‰ÇÃëŒè€ÇΔÇ»ÇÈèoóÕÉ`ÉÉÉlÉãÇåàíËǵÅADZÇÃèÓïÒÇǪÇÃÉOÉçÅ[ÉoÉãÇ…äiî[ǵǃǢÇÈÇÊǧDžå©Ç¶Ç‹Ç∑ÅBÇ≥ÇÁÇ…ïKóvÇΔÇ»ÇÈí«â¡ÇÃÉRÅ[ÉhÇÕÇ≤Ç≠ÇÌÇ∏Ç©Ç≈Ç∑ÅBÇ«ÇÃÉ`ÉÉÉlÉãÇ…èoóÕÇ™çsÇÌÇÍǃǢÇÈÇ©Çí«ê’Ç∑ÇÈÉRÅ[ÉhǙdžÇÍÇŒè\ï™Ç≈Ç∑ÅB
íçà”:
ÉIÉvÉVÉáÉìÇÃèoóÕÉ`ÉÉÉlÉãåoóRÇ≈ÉTÉEÉìÉhÇèoÇ∑ÇΩÇflÇ… Speech Manager ÇégópÇ∑ÇÈDZÇΔLJÇ≈Ç´Ç‹Ç∑ÅBí èÌǫǮÇË NewSpeechChannel ÇåƒÇ—èoǵÅAÇ≥ÇÁÇ… soSoundOutput ÉZÉåÉNÉ^ÇΔèoóÕÉRÉìÉ|Å[ÉlÉìÉgÇÃÉRÉìÉ|Å[ÉlÉìÉgÉCÉìÉXÉ^ÉìÉXÇégǡǃ SetSpeechInfo ÇåƒÇ—èoǵNjÇ∑ÅB
err = SetSpeechInfo (theAIFWSpeechChan, soSoundOutput, &theAIFWComponent);
|
|
É}ÉãÉ`ÉTÉEÉìÉhì¸óÕÉ`ÉÉÉlÉã
DZÇÃã@î\ÇÕÉ}ÉãÉ`ÉTÉEÉìÉhèoóÕÉ`ÉÉÉlÉãÇΔÇŸÇ⁄ìØólÇ…ìÆçÏǵNjÇ∑ÅBÉTÉEÉìÉhì¸óÕÇ≈àŸÇ»ÇÈÇÃÇÕÅAÉRÉìÉ|Å[ÉlÉìÉgÇ≈ÇÕÇ»Ç≠ÉhÉâÉCÉoÇ™ïKóvÇ»ì_ÇæÇØÇ≈Ç∑ÅB
ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ≈ÇÕégópâ¬î\Ç»ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇïKóvÇ»êîÇæÇØÉIÅ[ÉvÉìÇ≈Ç´ÇÈÇΩÇflÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™çsǧÇ◊ǴDZÇΔÇÕÅAǪÇÍǺÇÍÇÃÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇÃñºëOÇégǡǃSPBOpenDevice ÇâΩìxLJåƒÇ—èoÇ∑DZÇΔÇæÇØÇ≈Ç∑ÅB
Sound Manager Ç…ÇÕÅAégópâ¬î\Ç»Ç∑Ç◊ǃÇÃÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇä»íPÇ…óÒãìÇ∑ÇÈÇΩÇflÇÃåƒÇ—èoǵǙópà”Ç≥ÇÍǃǢNjÇ∑ÅB
SPBGetIndexedDevice (index, drvrName, &drvrIcon);
|
1 Ç©ÇÁénÇ‹ÇÈÉCÉìÉfÉbÉNÉXÇìnǵÅAÉGÉâÅ[Ç™ï‘Ç≥ÇÍÇÈÇ‹Ç≈ǪÇÍÇ 1 ǬÇ∏ǬÉCÉìÉNÉäÉÅÉìÉgǵǃǢÇ≠ÇæÇØÇ≈ÅAêvë¨Ç©Ç¬óeà’Ç…égópâ¬î\Ç»Ç∑Ç◊ǃÇÃÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇä‹ÇfiÉäÉXÉgÇç\ízÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
QuickTime Ç…ÇÊÇÈï˚ñ@
Ç‹ÇΩÅAíPèÉÇ… QuickTime ÇégópǵÅAì¸óÕÉ\Å[ÉXÇÃê›íËÇΔò^âπÇçsǧ Sequence Grabber Çégǡǃò^âπÇ∑ÇÈDZÇΔLJÇ≈Ç´Ç‹Ç∑ÅB
éüÇÃÉRÅ[ÉhÇ≈ÇÕÅAQuickTime Çà Sequence Grabber ÉTÉEÉìÉhì¸óÕÉpÉlÉãÇóòópÇ∑ÇÈDZÇΔÇ…Ç»ÇËÇ‹Ç∑ÅB
ComponentResult err;
SGChannel sgSoundChanRef;
SeqGrabComponent sgComponent;
sgComponent = OpenDefaultComponent (SeqGrabComponentType, 0);
err = SGInitialize (sgComponent);
if (err == noErr) {
err = SGNewChannel (sgComponent, SoundMediaType, &sgSoundChanRef);
}
if (err == noErr) {
err = SGSettingsDialog (sgComponent, sgSoundChanRef, 0, nil, 0L, nil, nil);
}
return err;
}
|
QuickTime Çégǡǃò^âπÇ∑ÇÈóòì_Çà 1 ǬÇÕÅAQuickTime Ç™é©ìÆìIÇ…ÉåÅ[ÉgÇê›íËÇ∑ÇÈÅAǬNjÇËÉTÉEÉìÉhÇïœä∑Ç∑ÇÈÇΔǢǧì_Ç≈Ç∑ÅBǪÇÃåãâ ÅAì¡íËÇÃÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇ™íÒãüÇ∑ÇÈÉTÉìÉvÉäÉìÉOÉåÅ[ÉgÇ…ÇÊÇÈò^âπÇ…å¿íËÇ≥ÇÍÇÈDZÇΔÇ»Ç≠ÅAîCà”ÇÃÉTÉìÉvÉäÉìÉOÉåÅ[ÉgÇ≈å¯â ìIÇ…ò^âπÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
ÉnÅ[ÉhÉEÉFÉAÉxÉìÉ_Ç™É}ÉãÉ`ÉTÉEÉìÉhì¸óÕÉhÉâÉCÉoÇçÏê¨ÇµÇÊǧÇΔÇ∑ÇÈÇΔÅAÉfÉxÉçÉbÉpÇÊÇËÇÌÇ∏ǩDžëΩÇ≠ÇÃçÏãΔÇ™ïKóvÇ…Ç»ÇËÇ‹Ç∑ÅBǬNjÇËÅAÉhÉâÉCÉoÇ䯇¯Ç…ï°êªÇµÇ»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÇ™ÅAïKóvÇ»ÇÃÇÕDZÇÍÇæÇØÇ≈Ç∑ÅB
É{ÉäÉÖÅ[ÉÄÇΔÉpÉjÉìÉO
Sound Manager åoóRÇ≈çƒê∂Ç≥ÇÍǃǢÇÈÉTÉEÉìÉhÇÃÉ{ÉäÉÖÅ[ÉÄÇí≤êÆÇ∑ÇÈÇ…ÇÕÅAéüÇÃÉRÅ[ÉhÇÃÇÊǧDžÅASndDoImmediate åƒÇ—èoǵÇ≈î≠çsÇ≥ÇÍÇÈ volumeCmd ÇégópǵNjÇ∑ÅB
SndCommand theCmd;
UInt16 rightVol, leftVol;
theCmd.cmd = volumeCmd;
theCmd.param2 = (rightVol << 16) | leftVol;
err = SndDoImmediate(chan, &theCmd);
|
ç∂âEÇÃÉ{ÉäÉÖÅ[ÉÄÇÕé¿ç€Ç…ÇÕ 16 ÉrÉbÉgÇÃå≈íËè¨êîì_êîÇ≈Ç∑ÅB32 ÉrÉbÉgÇÃå≈íËè¨êîì_êîÇΔìØólÇ…ÅAè„à
8 ÉrÉbÉgÇÕÉ{ÉäÉÖÅ[ÉÄÇÃêÆêîïîï™Çï\ǵÅAâ∫à 8 ÉrÉbÉgÇÕÉ{ÉäÉÖÅ[ÉÄÇÃè¨êîïîï™Çï\ǵNjÇ∑ÅBÇΩÇΔǶnjÅAÉ{ÉäÉÖÅ[ÉÄÇÃílÇ0x01000100 ÇΔê›íËÇ∑ÇÈÇΔóºï˚ÇÃÉ`ÉÉÉlÉãÇ™ÉtÉãÉ{ÉäÉÖÅ[ÉÄÇ…Ç»ÇËÇ‹Ç∑ÅBàÍï˚ÅA0x01000080 ÇΔǢǧílÇê›íËÇ∑ÇÈÇΔÅAâEÉ`ÉÉÉlÉãÇÕÉtÉãÉ{ÉäÉÖÅ[ÉÄÇ…Ç»ÇËÇ‹Ç∑Ç™ÅAç∂É`ÉÉÉlÉãÇÕÇøÇÂǧǫîºï™ÇÃÉ{ÉäÉÖÅ[ÉÄÇ…Ç»ÇËÇ‹Ç∑ÅB
éûä‘ÇÃåoâflÇΔÇΔLJDžÅAç∂ÇÃÉ{ÉäÉÖÅ[ÉÄÇÇæÇÒÇæÇÒëÂÇ´Ç≠ǵÅAâEÇÃÉ{ÉäÉÖÅ[ÉÄÇÇæÇÒÇæÇÒè¨Ç≥Ç≠Ç∑ÇÈÇÊǧǻåƒÇ—èoǵÇçsǧÇΔÅAÉTÉEÉìÉhÇç∂Ç©ÇÁâEÇ…ÉpÉìÇ≥ÇπÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
ÇΔDZÇÎÇ≈ÅAàÍïîÇÃÉfÉxÉçÉbÉpÇ©ÇÁÅu1 ǬÇÃÉ`ÉÉÉlÉãÇ…ëŒÇµÇƒ 0x0100 Çí¥Ç¶ÇÈÉ{ÉäÉÖÅ[ÉÄÇê›íËÇ∑ÇÈÇΔǫǧǻÇËÇ‹Ç∑Ç©ÅvÇΔǢǧéøñ‚ÇéÛÇØÇÈDZÇΔǙdžÇËÇ‹Ç∑ÅBìöǶÇÕä»íPÇ≈Ç∑ÅBÉTÉEÉìÉhÇ™ÇæÇÒÇæÇÒëÂÇ´Ç≠Ç»ÇÈÇæÇØÇ≈Ç∑ÅBvolumeCmd ÇégǡǃÅAÉnÅ[ÉhÉçÉbÉNÇ≥ǻǙÇÁÇÃé®ÇǬÇÒÇ¥Ç≠ÇÊǧǻÉtÉãÉ{ÉäÉÖÅ[ÉÄÇ…ëŒâûǵÇΩÉTÉEÉìÉhÉåÉxÉãÇê›íËÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
QuickTime Ç…ÇÊÇÈï˚ñ@
ÉTÉEÉìÉhÇÃÉ{ÉäÉÖÅ[ÉÄÇΔÉpÉjÉìÉOÇêßå‰Ç∑ÇÈLJǧ 1 ǬÇà (ǵǩLJÇÊÇËÇÊÇ¢) ï˚ñ@ÇΔǵǃÅAì`âΔÇÃïÛìÅÇ≈džÇÈ
QuickTime ÇégǧÇΔǢǧéËǙdžÇËÇ‹Ç∑ÅBQuickTime 2.1 ÇÃÉÇÉfÉBÉtÉ@ÉCÉAÉgÉâÉbÉNÇégópÇ∑ÇÈÇΔÅAï°éGÇ»ÉGÉtÉFÉNÉgÇä‹ÇfiÉTÉEÉìÉhÇçƒê∂Ç∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅB
Tween Media ÉnÉìÉhÉâ
QuickTime 2.5 Ç≈íÒãüÇ≥ÇÍǃǢÇÈ Tween Media ÉnÉìÉhÉâÇégópÇ∑ÇÈÇΔÅAǪÇÍǺÇÍÇÃÉTÉEÉìÉhÉ`ÉÉÉlÉãDžǬǢǃäJénÉ{ÉäÉÖÅ[ÉÄÇΔèIóπÉ{ÉäÉÖÅ[ÉÄÇæÇØÇéwíËÇ∑ÇÈÇæÇØÇ≈ä»íPÇ…ÉpÉjÉìÉOÇé¿åªÇ∑ÇÈDZÇΔÇ™Ç≈Ç´Ç‹Ç∑ÅBTween
ÉRÉìÉ|Å[ÉlÉìÉgÇ™íÜä‘ÇÃÉ{ÉäÉÖÅ[ÉÄílÇÇ∑Ç◊ǃé©ìÆìIÇ…ê∂ê¨ÇµÇ‹Ç∑ÅBDZÇÍÇÕÅAQuickTime 2.1
ÇΔÇÕëÂÇ´Ç≠àŸÇ»ÇÈì_Ç≈Ç∑ÅBQuickTime 2.1 ÇÕ Tween Media ÉnÉìÉhÉâÇéùÇΩÇ∏ÅAÉ{ÉäÉÖÅ[ÉÄÇÃÉpÉjÉìÉOÇçsǮǧÇΔÇ∑ÇÈÇΔÅAëΩêîÇÃíÜä‘ÇÃÉ{ÉäÉÖÅ[ÉÄílÇê›íËÇ∑ÇÈïKóvǙdžÇËNjǵÇΩÅBTween
Media ÉnÉìÉhÉâÇÕÅAÉfÉxÉçÉbÉpÇ™íPèÉÇ…äJénÉ{ÉäÉÖÅ[ÉÄÇΔèIóπÉ{ÉäÉÖÅ[ÉÄÇéwíËÇ≈Ç´ÇÈÇÊǧDžÇ∑ÇÈDZÇΔÇ≈ÅAèàóùÇíPèÉâªÇµÇ‹Ç∑ÅBTween Media ÉnÉìÉhÉâÇÕÅAÉÄÅ[ÉrÅ[ (ÉTÉEÉìÉh) ÇÃêiçsÇ…î∫Ç¢ÅAÉ{ÉäÉÖÅ[ÉÄÇÃê›íËÇ™ê≥ǵÇ≠çsÇÌÇÍǃǢÇÈǩǫǧǩÇé©ìÆìIÇ…É`ÉFÉbÉNǵNjÇ∑ÅB
Tween Media ÉnÉìÉhÉâÇÃégÇ¢ï˚DžǬǢǃÇÕÅAÅwDeveloper's Guide: QuickTime for Macintosh version 2.5ÅxÇÃëÊ 13 èÕÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
ÉÇÉfÉBÉtÉ@ÉCÉAÉgÉâÉbÉNDžǬǢǃÇÕÅAÅwDeveloper's Guide: QuickTime for Macintosh version 2.5ÅxÇà 1-21 ÉyÅ[ÉWà»ç~ÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
ÉTÉEÉìÉhÉ`ÉÉÉlÉãÇÃÉÇÉjÉ^
àÍïîÇÃÉfÉxÉçÉbÉpÇÕÅAÉåÉxÉãÇÃåvë™Ç»Ç«ÅAÇ≥NjǥNjǻñ⁄ìIÇ≈ÉTÉEÉìÉhèoóÕÉ`ÉÉÉlÉãÇÉÇÉjÉ^ǵÇΩÇ¢ÇΔçlǶǃǢNjÇ∑ÅBDZÇÍÇ‹Ç≈ÅASound Manager ÇÃÉoÉbÉtÉ@Çä»íPÇ…éÊìæÇ∑ÇÈï˚ñ@ǙǻǩǡÇΩÇΩÇflÅADZÇÍÇÕǩǻÇËÇfiÇ∏ǩǵǢèàóùÇ≈ǵÇΩÅBǪÇÃÇΩÇflÅAåªç›çƒê∂Ç≥ÇÍǃǢÇÈÉTÉEÉìÉhÇÃà íuÇêÑë™Ç∑ÇÈǵǩdžÇËÇ‹ÇπÇÒÇ≈ǵÇΩÅB
Sound Manager 3.2.1 Ç≈ÇÕÉvÉåÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇÉCÉìÉXÉgÅ[ÉãÇ≈Ç´ÇÈÇÊǧDžǻÇËÅADZÇÃñ‚ëËÇÃâåàÇ™óeà’Ç…Ç»ÇËNjǵÇΩÅBDZÇÍÇÕÅAÉRÉìÉ|Å[ÉlÉìÉgÉ`ÉFÅ[ÉìÇÃíÜÇ≈ Apple Mixer ÉRÉìÉ|Å[ÉlÉìÉgÇÃíºëOÇ…ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍÇÈÉRÉìÉ|Å[ÉlÉìÉgÇ≈Ç∑ÅB
ÉvÉåÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇÕÅAǪÇÍÇ™ÉCÉìÉXÉgÅ[ÉãÇ≥ÇÍǃǢÇÈÉ`ÉÉÉlÉãÇëŒè€Ç…ïœä∑Ç≥ÇÍÇΩÉTÉEÉìÉhÉfÅ[É^ÇÉ`ÉFÉbÉNǵNjÇ∑ÅBǬNjÇËÅAApple Mixer Ç™åªç›çƒê∂íÜÇÃï ÇÃÉTÉEÉìÉhÇΔÉ~ÉLÉVÉìÉOǵÇÊǧÇΔǵǃǢÇÈÅAà≥èkÇ≥ÇÍǃǢǻÇ≠ǃÅAÉåÅ[Égïœä∑ÅAÉ`ÉÉÉlÉãïœä∑ÅAÇ®ÇÊÇ—ÉTÉCÉYïœä∑Ç≥ÇÍÇΩÉfÅ[É^ÇÉ`ÉFÉbÉNǵNjÇ∑ÅB
åªç›ÇÃÇΔDZÇÎÅAÇ∑Ç◊ǃÇÃÉTÉEÉìÉhÉ`ÉÉÉlÉãÇ≈É~ÉLÉVÉìÉOÇ≥ÇÍÇΩåãâ ÇÉ`ÉFÉbÉNÇ∑ÇÈÉ|ÉXÉgÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈï˚ñ@ÇÕdžÇËÇ‹ÇπÇÒÅBǵǩǵÅADZÇÃÇÊǧǻÉRÉìÉ|Å[ÉlÉìÉgÇÕÇ∑Ç≈Ç…ë∂ç›ÇµÇƒÇ®ÇËÅAÉTÉEÉìÉhèoóÕÉRÉìÉ|Å[ÉlÉìÉgÇΔåƒÇŒÇÍǃǢNjÇ∑ÅB
ÉvÉåÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇèëÇ≠ï˚ñ@ÇÕÅAëºÇÃÉTÉEÉìÉhÉRÉìÉ|Å[ÉlÉìÉgÇÃèÍçáÇΔNjǡÇΩÇ≠ìØólÇ≈Ç∑ÅBÉTÉEÉìÉhÉRÉìÉ|Å[ÉlÉìÉgÇ™ÉTÉ|Å[ÉgÇ∑ÇÈïKóvÇÃdžÇÈÉZÉåÉNÉ^DžǬǢǃÇÕÅAÅwInside Macintosh: SoundÅxÇÃëÊ 4 èÕÇéQèΔǵǃÇ≠ÇæÇ≥Ç¢ÅB
ÉvÉåÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈÇ…ÇÕÅAêVǵǢ SPBSetDeviceInfo
ÉZÉåÉNÉ^Çà siPreMixerSoundComponent ÇégÇ¢ÅAÉCÉìÉXÉgÅ[ÉãǵÇΩÇ¢ÉvÉåÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇãLèqÇ∑ÇÈSoundComponentLink Ç…É|ÉCÉìÉ^ÇìnǵNjÇ∑ÅB
éüÇÃÉTÉìÉvÉãä÷êîÇÕÅAíPèÉÇ»ÉTÉEÉìÉhÉ`ÉÉÉlÉãÇçÏê¨ÇµÅAǪÇÃÉTÉEÉìÉhÉ`ÉÉÉlÉãÇ…éwíËǵÇΩÉvÉåÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈï˚ñ@ÇãÔëÃìIÇ…é¶ÇµÇƒÇ¢Ç‹Ç∑ÅB
SndChannelPtr CreateChannelWithPreMixer (SndCallBackUPP callbackRoutine, OSType pmcSubTye)
{
SoundComponentLink preMixerCmp;
SndChannelPtr theChannel = nil;
OSErr err;
/* êVǵǢÉTÉEÉìÉhÉ`ÉÉÉlÉãÇçÏê¨Ç∑ÇÈ */
err = SndNewChannel (&theChannel, sampledSynth, 0, callbackRoutine);
if (err == noErr) {
/* ÉvÉåÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇíËã`Ç∑ÇÈ */
preMixerCmp.description.componentType = kSoundEffectsType;
preMixerCmp.description.componentSubType = pmcSubTye;
preMixerCmp.description.componentManufacturer = 0;
preMixerCmp.description.componentFlags = 0;
preMixerCmp.description.componentFlagsMask = 0;
preMixerCmp.mixerID = nil;
preMixerCmp.linkID = nil;
}
if (err == noErr) {
/* ÉvÉåÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇ Apple Mixer ÇÃëOÇ…ÉCÉìÉXÉgÅ[ÉãÇ∑ÇÈ */
err = SndSetInfo (theChannel, siPreMixerSoundComponent, &preMixerCmp);
}
if (err != noErr) {
theChannel = nil;
}
return (theChannel);
}
|
ÉvÉåÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇΔÇÃä‘Ç≈èÓïÒÇÇ‚ÇËéÊÇËÇ∑ÇÈÇ…ÇÕÅASndSetInfo Ç®ÇÊÇ—SndGetInfo ä÷êîÇégǢNjÇ∑ÅBÇΩÇΔǶnjÅAéüÇÃåƒÇ—èoǵÇÕÅAÉåÉxÉãÉÅÅ[É^ÉRÉìÉ|Å[ÉlÉìÉgÇ©ÇÁåªç›ÇÃílÇéÊìæÇµÇ‹Ç∑ÅB
err = SndGetInfo (theChannel, LMValue, &level);
|
èdóvÇ»êßå¿éñçÄ
ÉvÉåÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇ…ÇÕ 1 ǬÇÃèdóvÇ»êßå¿éñçÄǙdžÇËÇ‹Ç∑ÅBǬNjÇËÅAÉvÉåÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇÕÉTÉEÉìÉhÇÃí∑Ç≥Çí∑Ç≠Ç≈ǴǻǢÇΔǢǧêßå¿Ç≈Ç∑ÅBÉäÉoÅ[ÉuÇ‹ÇΩÇÕÉtÉFÅ[ÉhÉRÉìÉ|Å[ÉlÉìÉgÇèëǢǃǢÇÈèÍçáÅADZÇÃêßå¿ÇÕîÒèÌÇ…èdóvÇ≈Ç∑ÅBDZÇÍÇÁÇÃÉ^ÉCÉvÇÃÉTÉEÉìÉhÉGÉtÉFÉNÉgÇê≥èÌÇ…ìÆçÏÇ≥ÇπÇÈÇ…ÇÕÅAÉRÉìÉ|Å[ÉlÉìÉgÇ…ÇÊÇÈÉGÉtÉFÉNÉgÇΔÇÃíuÇ´ä∑ǶǙÇ≈Ç´ÇÈÇÊǧDžÅAçƒê∂Ç≥ÇÍÇÈÉTÉEÉìÉhÇ™è\ï™Ç…í∑Ç¢ñ≥âπÇÃÉGÉìÉfÉBÉìÉOÇéùÇ¡ÇƒÇ¢Ç»ÇØÇÍnjǻÇËÇ‹ÇπÇÒÅBÉvÉåÉ~ÉLÉTÉRÉìÉ|Å[ÉlÉìÉgÇÕÉTÉEÉìÉhÇÃí∑Ç≥ÇíZÇ≠Ç∑ÇÈDZÇΔÇÕÇ≈Ç´Ç‹Ç∑Ç™ÅAí∑Ç≠Ç∑ÇÈDZÇΔÇÕÇ≈Ç´Ç‹ÇπÇÒÅB |
óvñÒ
DZÇà TECHNOTE Ç≈ÇÕÅADZÇÍÇ‹Ç≈džNjÇËímÇÁÇÍǃǢǻǩǡÇΩ Sound Manager ÇÃã@î\DžǬǢǃê‡ñæÇµÇ‹ÇµÇΩÅBDZÇÍÇÁÇÃã@î\Ç™óùâÇ≈Ç´ÇÍÇŒÅAǪÇÍÇÁÇè\ï™Ç…óòópǵǃÅADZÇÍÇ‹Ç≈DžǻǢóDÇÍÇΩÉTÉEÉìÉhÉAÉvÉäÉPÅ[ÉVÉáÉìÇäJî≠Ç≈Ç´ÇÈÇÊǧDžǻÇÈÇÕÇ∏Ç≈Ç∑ÅB
çXêVì˙: 1997 îN 10 åé 6 ì˙
|